/*
 *  ECULockLib
 *  support bind/unbind,lock/unlock,passive lock
 *
 *  Copyright (C) xyl, All Rights Reserved
 *  SPDX-License-Identifier: Apache-2.0
 */
#ifndef _NVRECULOCKLIB_H_
#define _NVRECULOCKLIB_H_


typedef unsigned char  u8 ;
typedef unsigned short u16;
typedef unsigned int  u32 ;


typedef struct LibStatus_ST
{
	u8	TBOXHandShakeSTA;	//TBOX握手状态，0x00：无效，0x03：TBOX在，0x04：TBOX不在
	u8	LibRunSTA;	//Lib运行状态；指示Lib库状态机是否正常，出现异常时，需要重新初始化状态机
	u8	Flag_CMDToRSV;	//命令待接收标志，0x00：没有接收数据，0x01 有待接收数据
	u8	Flag_BindToDo;	//绑定/解绑待执行标志，0x00：没有待执行操作，0x01：有待解绑操作，0x02：有待绑定操作
	u8	Flag_LockToDo;	//锁车/解锁待执行标志（码）	0x00：没有待执行操作，0x01：有待解锁操作，0x02：有待一级锁车操作，0x03：有待二级锁车操作
	u8	Flag_CANToSend;	//CAN待发送标志，0x00：没有数据发送，0x01 有数据要发送
	u8	CANID_DATA_OUT[14];	//输出CANID和DATA缓冲区 data[0]表示CAN类型（0x00表示标准帧，0x01表示扩展帧），data[1-4]表示CANID（低字节在前），data[5-12]表示CAN的8字节数据（低字节在前）。
	u8	TempLockSTA;	//临时解锁状态，0x00表示未临时解锁，0x01表示临时解锁
	u8	Flag_PassiveLockToDo;	//被动锁车/解锁待执行标志（码） 0x00：没有待执行操作，0x01：有待被动解锁操作，0x02：有待被动锁车操作
}LibStatus_ST;
extern volatile LibStatus_ST LibStatus;

u8	n_ECULockLibInit(const u8 *data);	//初始化接口（48字节的锁车参数块）		若失败，需要恢复默认值
u8	n_ECULockLibParasRecovery(void);	//恢复默认值（48字节的锁车参数块）		将锁车参数块恢复到默认值，解锁解绑状态，且算法参数也被清除
u8	n_ECULockLibGetLockParas(u8 *data);	//获取Lib库内部数据（48字节的锁车参数块）		将锁车参数块读取出来
u8	n_ECULockLibProcess(u16 period);	//处理主函数（间隔时间）		需要ECU循环调用，建议100ms周期

u8	n_ECULockLibSetRSVSTA(u8 state);	//设置接收状态函数（成功or失败）		
u8	n_ECULockLibSetBindSTA(u8 flag,u8 state);	//设置绑定执行状态函数（待执行标志，成功or失败）		
u8	n_ECULockLibSetLockSTA(u8 flag,u8 state);	//设置锁车执行状态函数（待执行标志，成功or失败）		
u8	n_ECULockLibSetPassiveLockSTA(u8 flag,u8 state);	//设置被动锁车执行状态函数（待执行标志，成功or失败）		
u8	n_ECULockLibSetPassiveLockDelayTime(u16 time);	//设置被动锁车延时时间函数（时间，单位分钟）
u16	n_ECULockLibGetPassiveLockDelayTime(void);	//读取设置的被动锁车延时时间函数（时间，单位分钟）


u8	n_ECULockLibLockDelayTiming(u16 period);	//延时锁车计时函数		需要ECU在累计工作计时的时候循环调用，建议100ms周期

u8	n_ECULockLibInjectCAN(const u8 *data);	//注入CAN数据函数（ID+DATA）		
u8	n_ECULockLibSetSentSTA(u8 state);	//CAN数据发送状态函数（成功 or 失败）		

u8	n_ECULockLibGetStatus(u8 *data);	//获取Lib库中各标志函数，获取绑定命令、锁车命令、绑定状态、锁车状态、被动锁车状态、临时解锁状态、锁车倒计时时间、临时解锁倒计时时间、被动锁车倒计时时间

u32	n_ECULockLibTempLockRandomMake(void);	//产生随机数接口（4个字节的随机数）		临时离线解锁需要的随机数
u8	n_ECULockLibTempLockSigIn(u32 sig);	//输入验证码接口		临时离线解锁需要输入的验证码，成功返回0x00，失败返回其他值
u32	n_ECULockLibTempLockRandomCheck(void);	//输出Lib存储的随机数接口（4个字节的随机数）		临时离线解锁需要的随机数检查，输出本次Lib库内部存储的随机数
u8	n_ECULockLibTempLockCancel(void);	//取消临时解锁接口		将临时解锁取消，时长清零

u8	n_ECULockLibGetVersion(u8* ver);	//读取lib库版本号，3个字节长度，显示为ver[0].ver[1].ver[2]，比如0.1.2

#endif
